package resml

import (
	"io"
)

// 资源接口
type Resource interface {
	// 资源ID，唯一标识一个资源。它可以是但不限于 URL。
	Uri() string
	// 资源的元数据。
	// 如果返回的 error 不为 nil，则返回的 meta 一定为 nil。
	// 可以判断是否为 MultiError 来分析具体的出错细节。
	Meta() (Meta, error)
	// 获得资源，返回一个 ReadCloser、Meta 和 error。
	// ReadCloser 用于读取资源内容，Meta 为资源的元数据，error 为出错信息。
	// 如果返回的 error 不为 nil，则返回的 ReadCloser 和 Meta 一定为 nil。
	Get() (io.ReadCloser, Meta, error)
	// 创建/更新资源
	Put(Meta, io.Reader) error
	// 删除资源
	Remove() error
}

// 可以追加资源内容的接口（一般用于日志等流式追加写入）
type ResourceAppendable interface {
	Append() // 设置为可追加写入
}
